package com.hspedu.customgeneric;

import java.util.ArrayList;

/**
 * @Author Stringzhua
 * @Date 2024/3/14 14:31
 * description:关于泛型方法的使用
 */
public class CustomMethodGeneric {
    public static void main(String[] args) {
        Car car = new Car();
        car.fly("宝马", 100);//当调用方法时,传入参数,编译器就会确定类型 //String Integer
        car.fly(300, 100);//自动装箱 Integer Integer

        //测试
        //T->String R-->ArrayList
        Fish<String, ArrayList> fish = new Fish<>();
        fish.hello(new ArrayList(), 11.3f);
    }
}

//解读
//泛型方法,可以定义在普通类中，也可以定义在泛型类中
class Car {//普通类

    public void run() {//普通方法

    }

    //说明:泛型方法
    //1.<T,R>就是泛型
    //2.是提供给fly使用的
    public <T, R> void fly(T t, R r) {//泛型方法
        System.out.println(t.getClass());
        System.out.println(r.getClass());
    }
}

class Fish<T, R> {//泛型类

    public void run() {//普通方法

    }

    public <U, M> void wat(U u, M m) {//泛型方法

    }

    //说明
    //1.下面的hi方法不是泛型方法,而是hi方法使用类声明的泛型
    public void hi(T t) {

    }

    //2.泛型方法可以使用类声明的泛型,也可以使用自己声明的泛型
    public <K> void hello(R r, K k) {
        System.out.println(r.getClass());//class java.util.ArrayList
        System.out.println(k.getClass());//class java.lang.Float
    }
}
